import { md5 } from 'js-md5'; // 修改为导入整个模块

interface QueryParams {
    [key: string]: any;
    url?: string;
}

export default class SignMd5Utils {
    /**
     * 对JSON参数进行升序排序并转换为字符串值
     * @param jsonObj 发送参数
     */
    static sortAsc(jsonObj: Record<string, any>): Record<string, string> {
        const arr: string[] = [];
        for (const key in jsonObj) {
            const valueType = typeof jsonObj[key];
            if (valueType === 'boolean' || valueType === 'string' || valueType === 'number') {
                arr.push(key);
            }
        }
        const sortArr = arr.sort();
        const sortObj: Record<string, string> = {};
        for (const key of sortArr) {
            sortObj[key] = String(jsonObj[key]);
        }

        return sortObj;
    }

    /**
     * 对JSON参数进行升序排序（处理空值）
     * @param jsonObj 发送参数
     */
    static sortAsc2(jsonObj: Record<string, any>): Record<string, string | null | undefined> {
        const arr: string[] = [];
        for (const key in jsonObj) {
            arr.push(key);
        }
        const sortArr = arr.sort();
        const sortObj: Record<string, string | null | undefined> = {};
        for (const key of sortArr) {
            const value = jsonObj[key];
            if (value !== null && value !== undefined && value !== "") {
                sortObj[key] = String(value);
            } else {
                sortObj[key] = value;
            }
        }
        return sortObj;
    }

    /**
     * 获取请求签名
     * @param query 请求参数对象
     * @returns MD5签名
     */
    static getSign(query: QueryParams): string {
        // console.log(query);

        const requestBody = this.sortAsc({
            ...query,
        });
        const string = JSON.stringify(requestBody);
        // console.log('string',string);
        return md5(string); // 使用模块的正确方法
    }

    /**
     * 处理URL，移除查询参数
     * @param url 原始URL
     * @returns 处理后的URL
     */
    static returnNewUrl(url: string): string {
      let urlArr = url.split('/');
      let urlLast = urlArr[urlArr.length - 1];
      if(urlLast.includes("?")) {
        return urlLast.split('?')[0]
      }
      return urlLast;
    }
}
